什麼是API?
API,全名是 Application Programming Interface,也就是「應用程式介面」。
把這個詞拆開來看,「應用程式」大家應該都很熟悉;至於「介面」,對於初學者來說可能有些陌生。
當我們去 Google 搜尋「介面」的定義,會得到這樣的答案:
「介面(英語:interface)是泛指實體把自己提供給外界的一種抽象化物,用以由內部操作分離出外部溝通方法,使其能被修改內部而不影響外界其他實體與其互動的方式,介面是兩實體交換資料的媒介,交換資料的實體可以是軟體、電腦硬體、外部裝置、人等等。」
讀完這段描述,你可能感覺更困惑了,別擔心,我們換個方式來理解這個概念。
在生活中,介面可以是任何促進溝通和交互的東西。比如你使用的手機螢幕、鍵盤、瀏覽器,這些都是介面,它們讓你能夠與裝置互動。而在軟體設計中,介面扮演的是定義與規範的角色。這種「抽象的約定」確保不同的軟體系統可以用一致的方式進行溝通,交換資料,甚至執行功能。
想像一下,一個應用程式想要存取一台伺服器上的資料,或者兩個應用程式需要互相傳遞訊息。這時候,介面就是他們之間的通訊協定,確保數據可以正確且有序地傳輸。而這就是 API 的工作——它是應用程式之間的「溝通語言」與「交互標準」。
在 C# 等程式語言中,介面(Interface) 是一個非常重要的概念,它允許開發者定義某一組行為或功能,並由不同的類別來實作這些行為。介面本身只是一個「約定」,它不包含任何實作細節,而具體的類別才會負責如何執行這些行為。
想像一下,你是一個喜歡到處吃美食的饕客,而「介面」(Interface)就像是一種料理的基本約定。比方說,有一個介面是「日式料理」,它包含了幾道經典的日式餐點:拉麵、生魚片、丼飯、壽司。這就是這個介面所包含的內容。
現在,各家餐廳(類別)都決定要提供這些日式料理,但他們可以按照自己的方式來做這些菜餚。也就是說,每家餐廳繼承了「日式料理」這個介面,但每家餐廳對這些料理的做法可能都不一樣。
在程式設計中,介面(Interface)是一種抽象類型,用來定義一組不具體實作的方法、屬性、事件或索引子(indexers),而不包含任何實作細節。它強調「行為的約定」,即哪些方法或功能必須被實作,但不會具體描述這些方法該如何運作。介面本身無法被實體化,必須由具體的類別來實作。任何實作這個介面的類別都必須遵守這些定義——就像各家餐廳都得做出拉麵、生魚片、丼飯和壽司,不過具體怎麼做,每家餐廳可以自由發揮。
讓我們來看個程式碼範例:
//建立一個介面interface 名稱是 IJapaneseCuisine
public interface IJapaneseCuisine
{
void MakeRamen(); // 定義了做拉麵的方法
void MakeSashimi(); // 定義了做生魚片的方法
void MakeDonburi(); // 定義了做丼飯的方法
void MakeSushi(); // 定義了做壽司的方法
}
public class TokyoRestaurant : IJapaneseCuisine
{
public void MakeRamen()
{
Console.WriteLine("使用豚骨湯底製作拉麵"); // 東京餐廳用豚骨湯底做拉麵
}
public void MakeSashimi()
{
Console.WriteLine("使用最新鮮的海鮮做生魚片"); // 使用最新鮮的海鮮做生魚片
}
public void MakeDonburi()
{
Console.WriteLine("做一碗豪華的海鮮丼飯"); // 做一碗豪華的海鮮丼飯
}
public void MakeSushi()
{
Console.WriteLine("做一份經典壽司拼盤"); // 做一份經典壽司拼盤
}
}
public class OsakaRestaurant : IJapaneseCuisine
{
public void MakeRamen()
{
Console.WriteLine("使用醬油湯底製作拉麵"); // 大阪餐廳用醬油湯底做拉麵
}
public void MakeSashimi()
{
Console.WriteLine("使用當地漁獲做生魚片"); // 使用當地漁獲做生魚片
}
public void MakeDonburi()
{
Console.WriteLine("做一碗關西風的牛肉丼飯"); // 做一碗關西風的牛肉丼飯
}
public void MakeSushi()
{
Console.WriteLine("做一份創意壽司"); // 做一份創意壽司
}
}
在這個例子裡,IJapaneseCuisine
介面定義了幾道日式料理的方法:MakeRamen()
、MakeSashimi()
、MakeDonburi()
和 MakeSushi()
。無論是哪家餐廳(類別),只要它繼承了 IJapaneseCuisine
介面,就必須提供這些料理的做法。
然而,東京餐廳可能更喜歡用豚骨湯底來做拉麵,而大阪餐廳則選擇醬油湯底。同樣的生魚片、丼飯和壽司,每家餐廳都有自己獨特的製作方式。
儘管製作方法各不相同,最後呈現的仍然是符合「日式料理」這個定義的菜餚。這就是介面的魅力所在:它定義了一組必須提供的功能(或菜餚),但具體如何實現,則由各個類別(餐廳)自行決定。
這個比喻應該能幫助你更好地理解介面的概念。無論哪家餐廳如何創新,它們做出的拉麵、生魚片、丼飯和壽司始終還是「日式料理」,就像任何類別實作的介面方法最終還是符合介面的定義一樣。
當然,如果要深入探討,這個例子還有很多值得延伸的地方,比如:如果兩家餐廳使用相同的方法製作某道菜,或者其中一家餐廳不提供拉麵,該怎麼處理?(空繼承),如果是餐廳是總店與分店的概念呢?分店如果有特殊餐點的話呢?等等非常多特殊的情境,而這就涉及更深的設計模式探討了,這部分如果之後篇幅夠有機會在說吧~
現在,讓我們回到 API 的話題。其實 API 的概念也非常簡單。API 就是幫你溝通、交流、傳遞各不同系統的應用程式中介,是軟體之間溝通的橋樑,透過定義好的規則,讓不同系統交換數據或請求服務,提升整體整合和運作效率。
API 可以有多種形式,根據應用場景的不同,API 的種類也有區分。以下是幾種常見的 API:
API 是現代應用程式開發的關鍵部分,很多我們日常使用的應用程式背後都依賴於各種 API 進行數據交換和功能整合。以下是幾個常見的例子:
API 的最大優勢在於其靈活性和可擴展性。開發者可以重複使用別人的 API,整合現有的技術和數據,而不必重新發明輪子。這樣不僅節省了時間和成本,還提高了系統的互通性,讓不同應用能夠無縫協作。
今日小結:
今天,我們初步了解了什麼是 API,它的種類,以及它如何在我們的日常生活中默默發揮作用。API 的存在讓開發者能夠輕鬆地利用他人的技術成果,讓軟體開發變得更加高效。明天,我們將繼續探索 API 的世界,看看 API 是如何像一個「外送員」一樣,幫助應用之間運送數據。那我們這系列文章主要聚焦在WebAPI,後續說到API都是指WebAPI,而非另外兩種API。